草庐IT

C++ STL : Passing an empty container to lower_bound

全部标签

C++ STL 的 copy() 异常安全

如果我这样做了std::copy(source,source+size,destination);我有强大的异常安全保证吗?IE。如果std::copy抛出,destination保持不变? 最佳答案 附录E:标准库异常安全来自Stroustrop的C++编程语言是freelyviewablefromhiswebsite.由此而来:Thecopy()algorithm(§18.6.1)doesnotofferthestrongexception-safetyguarantee.Itdoesnotguaranteethatitwill

c++ - STL 容器 : Constructor's Allocator parameter and scoped allocators

STL容器有一个模板参数可以选择自定义分配器。花了一段时间,但我想我明白它是如何工作的。不知何故,它并不是很好,因为给定的分配器类型没有直接使用,而是反弹到另一种类型的分配器。我终于可以使用它了。看完API我认识到也有可能将分配器作为构造函数参数。但是,如果容器在内部从模板参数重新绑定(bind)给定的分配器,我怎么知道容器使用哪种分配器?此外,我读到C++11现在使用范围分配器,它允许将容器的分配器重用于其包含的容器。启用了作用域分配器的容器的实现与不知道作用域容器的容器的实现有何不同?很遗憾,我找不到任何可以解释这一点的东西。感谢您的回答! 最佳答案

c++ - 使用 STL 排序功能对列表进行排序

我正在尝试按降序对包含struct项的列表(类的一部分)进行排序,但它无法编译:error:nomatchfor'operator-'in'__last-__first'sort(Result.poly.begin(),Result.poly.end(),SortDescending());这里是SortDescending:structSortDescending{booloperator()(constterm&t1,constterm&t2){returnt2.pow谁能告诉我怎么了? 最佳答案 标准算法std::sort需要

【剖析STL】String

1.什么是STL?标准模板库(StandardTemplateLibrary,STL)是惠普实验室开发的一系列软件的统称。它是由AlexanderStepanov、MengLee和DavidRMusser在惠普实验室工作时所开发出来的。虽说它主要出现到C++中,但在被引入C++之前该技术就已经存在了很长时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。🔥标准模板库是一个C++软件库,大量影响了C++标准程序库但并非是

c++ - STL 中不必要的锁定? (Visual C++ Express)

我正在尝试构建一个可以扩展到多个内核的俄罗斯方blockAI算法。在我的测试中,使用多线程比使用单线程慢。经过一些研究,我发现我的线程大部分时间都在等待_Lockit_Lock(_LOCK_DEBUG)。.这是一个screenshot.如您所见,锁定应用于局部变量,无论如何它都不需要任何锁定!我的问题是:为什么STL会锁定这个vector?如何让我的程序更快?(使用数组?)更新我通过在我的VisualStudio项目中设置这些命令行选项来消除锁定:/D"_HAS_ITERATOR_DEBUGGING=0"/D"_SECURE_SCL=0"将此应用于解决方案文件中的所有项目非常重要,否则

c++ - STL vector 之间的自动转换

我想要的是复制一个std::vector到另一个std::vector带赋值运算符,其中myStruct可以分配一个int.所以我写了这段代码:#include#includeusingnamespacestd;structmyStruct{myStruct(int&a):_val(a){}myStruct(int&&a):_val(a){}myStruct&operator=(int&a){_val=a;return*this;}int_val;};intmain(){vectorivec;ivec.push_back(1);vectorsvec=ivec;return0;}它给我错

c++ - 在 std::pair 中使用 `std::make_pair`:C++ STL

我多次注意到,每当需要为(新)std::pair赋值时,都会使用std::make_pair。但是我没有发现make_pair函数有任何用处,因为我们可以直接输入值对,然后随意修改它们。例如:std::pairnewp;std::cin>>newp.first>>newp.second;newp.first=-1;那么这个函数到底有什么用呢? 最佳答案 std::make_pair用于创建具有指定值的std::pair对象。Createsastd::pairobject,deducingthetargettypefromthetyp

c++ - 如何实现is_STL_vector

我想为STL的vector模板参数专门化一个模板。像这样://(1)templateclassA{...};//(2)templateclassA>{...};我不关心vector元素的类型。我想按如下方式使用它:Aa1;//WillusethegeneralspecializationA>a2;//Willusethesecondspecialization总的来说,我一直在尝试定义类似于boost类型特征的东西。有点像templatestructis_stl_vector{//WillbetrueifTisavector,falseotherwisestaticconstboolv

c++ - 使STL对象线程安全的标准方法?

我需要几个线程安全的STL容器。基本上我在想我只需要为每个STL容器对象添加2个方法,.lock().unlock()我也可以把它分解成.lockForReading().unlockForReading().lockForWriting().unlockForWriting()可行的方法是可以接受任意数量的并行读取锁,但如果有写入锁,则读取和写入将被阻止。尝试锁定写入等待,直到lockForReading信号量下降到0。有没有标准的方法来做到这一点?我的计划是错误的还是短视的? 最佳答案 这真的有点糟糕。外部代码将无法识别或理解您

c++ - 如何将结构传递给 STL 映射?

typedefstruct{pthread_tthreadId;intacceptSocketD;char*message;}threadData;mapserverPortNumberThreadId;map::iteratorserverPortNumberThreadIdIter;用法:threadDataobj;obj.threadId=0;obj.acceptSocketD=0;obj.message="ExcuseMe,please!";serverPortNumberThreadId.insert(3490,obj);错误:error:nomatchingfunction